package de.tu_darmstadt.gdi.battleship;


import java.util.Random;
import java.util.Vector;

import de.tu_darmstadt.gdi.battleship.gui.GamePanel;
import de.tu_darmstadt.gdi.battleship.gui.GameWindow;;
/**
 * 
 * @author Mischa Lundberg
 *
 */
public class Logic {
	//TODO: Intialize GamePanel
	GamePanel gP = new GamePanel();
	Map map;
	Ship ship;
	Random random;
	char[][] tempMap = map.returnWholeMap();
	public int[][] shotArray;


	private Player player1;
	private Player player2;
	
	/**
	 * erh�lt pos x, y des klicks, 
	 * wird ausgewertet je nachdem ob von player1 oder player2 geklickt wurde
	 * 
	 * Wenn treffer, dann true, ansosnten false
	 */
	public boolean doShot (int x, int y){
		switch (tempMap[x][y]){
		case 't': tempMap[x][y]='T';
		case 'r': tempMap[x][y]='R';
		case 'h': tempMap[x][y]='H';
		case 'v': tempMap[x][y]='V';
		case '-': tempMap[x][y]='*';
		case 'l': tempMap[x][y]='L';
		case 'b': tempMap[x][y]='B';
		default: tempMap[x][y]=tempMap[x][y];
		}

		//Setzt die schuesse fuer die Player!
		if(x>11)this.player2.setShots(x-11, y);
		else this.player1.setShots(x-11, y);
		//TODO: write the tempMap in the global Map
		map.setWholeMap(tempMap);
		//TODO: redraw the GamePanel with the actual Map
		gP.redraw();
		return ship.shipWasHit(x, y);
		
	}
	public void resetShotArray(){
		this.shotArray=null;
	}
	
	/**
	 * Is the KI for the Computer
	 * 
	 * @param IQ
	 */
	public void kI(int IQ){
		switch(IQ){
		case 1: kI1(); 
		case 2: kI2(17,17);
		default: kI1();}
	}
	


	/**
	 * returns a random int
	 * @return int
	 */
	private int getRandom(){
		int temp = random.nextInt(9);
		return temp; 
	}

	/**
	 * the simplest KI only random shots
	 */
	private void kI1(){
		int x = getRandom();
		int y = getRandom();
		if( shotArray[x][y]==0){
			shotArray[x][y]=1;
			if(doShot(x+11, y))shotArray[x][y]=2;}
		else kI1();
	}
	/*
	 * 4== bereits betrachtet und kein treffer
	 * 3== bereits betrachtet und treffer
	 * 2== getroffen
	 * 1== geschossen aber nicht getroffen
	 * 0== nicht geschossen
	 */
	/**
	 * the better KI analyzes the neighborhood
	 */
	private void kI2(int x, int y){
		if (x>11||y>11){
		x = getRandom();
		y = getRandom();}
		if(shotArray[x][y]==0){
			if(doShot(x, y)) shotArray[x][y]=2;
			else shotArray[x][y]=1;
		}
		else if(shotArray[x][y]==2||shotArray[x][y]==1){
			if(shotArray[x+1][y]==2){
				kI2(x+2, y);
				//if(doShot(x+2, y)) shotArray[x+2][y]=2;
				//else shotArray[x+2][y]=1;
			}
			else if(shotArray[x-1][y]==2){
				kI2(x-2,y);
				//if(doShot(x-2, y))shotArray[x-2][y]=2;
				//else shotArray[x-2][y]=1;
			}
			else if(shotArray[x][y+1]==2){
				kI2(x,y+2);
				//if(doShot(x, y+2))shotArray[x][y+2]=2;
				//else shotArray[x][y+2]=1;
			}
			else if(shotArray[x][y-1]==2){
				kI2(x,y-2);
				//if(doShot(x, y-2))shotArray[x][y-2]=2;
				//else shotArray[x][y-2]=1;
			}
			else {
				//kI2(15,17);
				if(doShot(x+1, y))shotArray[x+1][y]=2;
				else shotArray[x+1][y]=1;
			}
		}
	}
	

	
}
